#ifndef REFLECT_MATERIAL_H
#define REFLECT_MATERIAL_H

#include <algorithm/shared/data/topology/material/Material.h>
#include <utils/ParaUtils.h>

namespace solar
{
    // Reflect：吸收+反射
    class Reflect : public Material
    {
        public:
            Reflect() = default;
            [[nodiscard]] auto getType() const -> MaterialType override;
#include <utils/class_name.inc>

        private:
            double reflectivity_{0.88}; // 反射率  【默认吸收率=1-反射率】
            SlopeErrorType slope_error_type_{
                SlopeErrorType::
                    kGaussianSlopeError}; // 法向扰动的类型_枚举值--------！！！！是否直接存成string？？？
            double slope_{0.02};

            MaterialType type_{MaterialType::kMaterialReflect};
            BOOST_DESCRIBE_CLASS(solar::Reflect, (solar::Material), (), (),
                                 (reflectivity_, slope_error_type_, slope_))
    };

} // namespace solar
#define CURRENT_CLASS_NAME Reflect
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(Reflect, (Material), (), (), (reflectivity_, slope_error_type_, slope_))
#endif
